Jupyter Notebookと Boto3で AWS環境定義書を作成してみる
Jupyter Notebook(以降 Notebook) は実行可能なプログラムコードや分析結果、グラフなどを含んだドキュメントを作成するための OSSです。
Pythonによるデータ分析でよく利用されます。 特徴として 「Markdown セル」と「Code セル」 を Notebook内へ配置できます。
データ分析のプロセスの文脈を Markdownセルに書くことで、 プログラムのコメント以上の表現力で、プロセスを記述できることできます。
データの可視化についても、Notebookは優秀です。 Matplotlib のグラフや、Pandas のテーブルなどを Notebook内にインライン表示してくれます。
さて、Markdownセルによるドキュメンテーション、 pandas によるテーブル表記でふと思いました。 「Jupyter Notebook製 AWS環境定義書」 を作れるんじゃないかと。
さっそくやってみます。
目次
環境
- OS: macOS Catalina 10.15.3
- Python: 3.7.3
- Jupyter Notebook: 6.0.3
- Boto3: 1.11.9
- Pandas: 1.0.0
Jupyter Notebook セットアップ
Python, Boto3, Pandasの導入、および Boto3によるAWS情報取得についての手順は割愛します。 また現在では 進化版 Jupyter Notebookインターフェイスである Jupyter Lab が利用できますが、 今回はクラシックな Jupyter Notebook を使用します。
Installing the Jupyter Software どおりに進めます。
今回は pip
を使ったインストールで進めます。
pip install notebook
で Notebookをインストール後、作業ディレクトリ上で
jupyter notebook
を実行します。
ブラウザ上に Notebookインターフェイスが立ち上がります。
New
>>> Python3
を選択して新規 Notebookを作成します。
こんな感じでコード記述/実行、コメント記述/表示ができます。
キーボードショートカットは Help > Keyboard Shortcuts
から確認できます。
インターフェイスの使い方詳細は以下のブログを参照ください。
Notebook 上で Boto3, Pandasを触ってみる
例として AWSの 1リージョンの VPC情報を取得してみます。 VPC情報(Name, VpcId, Cidr, Tenancy, IsDefaultVpc) 一覧を表示してします。
必要なライブラリをインポートして、 VPC情報を取得します。
import boto3 import pandas as pd ec2_client = boto3.client('ec2') vpcs = ec2_client.describe_vpcs()['Vpcs']
vpcs[0]
を見てみます。
上の赤線の情報を取っていきます。
以下のコードで data
に情報を入れます。
data = [] for vpc in vpcs: # Name タグの取得 tags_filter = [t.get('Value') for t in vpc['Tags'] if t.get('Key') == "Name"] name = tags_filter[0] if tags_filter else '' # Cidr 取得と buffer 格納 for assoc in vpc['CidrBlockAssociationSet']: data.append([ name, vpc['VpcId'], assoc['CidrBlock'], vpc['InstanceTenancy'], vpc['IsDefault'] ])
これを DataFrameに格納します。
df_vpcs = pd.DataFrame(data, columns=["Name", "VpcId", "Cidr", "Tenancy", "IsDefault"])
表示できました。Markdownセルと合わせてVPC定義書っぽくなりました。
AWS環境定義書(みたいなもの)を作ってみる
こんな感じで ↓に AWS環境定義書の Notebookを作ってみました。
このNotebookで VPC, Subnet, RouteTable, Route, EC2一覧を出力できます。 (以下は html出力を pdfにしたもの)
HTML出力方法
jupyter nbconvert コマンドを使います。nbconvert はNotebookのエクスポート機能です。 HTML, Markdown, Latexなどに対応しています。
jupyter nbconvert AWSSpec.ipynb --no-input --to html --output awsspec.html
上のコマンドで AWSSpec.ipynb
Notebookを HTMLファイル awsspec.html
にエクスポートします。
--no-input
オプションで入力のコードを省いて出力できます。
最新の環境定義書を 1コマンドで
jupyter nbconvert AWSSpec.ipynb --execute --no-input --to html --output awsspec_now.html
--execute
オプションを付けると Notebookを実行した後にエクスポートします。
いつでも最新の環境定義書を 1コマンドで取得できるのは大きなメリットですね。
見た目を変える
HTML出力の場合 CSSをいじることでいくらでもカスタマイズできそうですが、
github: jupyter-themes という Jupyter Notebookのテーマ・フォントを変更できる機能で
出力の見た目を変えることができます。
(インストールは pip install jupyterthemes
)
▼出力例 1
jt -t solarizedl jupyter nbconvert AWSSpec.ipynb --no-input --to html --output awsspec_solarized.html
▼ 出力例 2
jt -t grade3 jupyter nbconvert AWSSpec.ipynb --no-input --to html --output awsspec_grade3.html
おわりに
Jupyter Notebook で AWS環境定義書(みたいなもの)を作ってみました。 Notebook, Pandas, そして Boto3を学ぶ良い機会になりました。
Notebookでは出力結果を逐一見ながらコードを書いていけるので、 コード量は膨れたものの そこまで苦ではありませんでした。
EXCEL環境定義書ほど見た目の自由度はないものの、 1コマンドでお手軽に最新のドキュメントを取得できるのは魅力的ではないでしょうか。
この記事が少しでもどなたかのお役に立てば幸いです。